//O(n+m)
int q[N];
bool topsort()
{
    int hh=0,tt=-1;

    //d[i]存储点i的入度
    for(int i=1; i<=n; i++)
    if(!d[i])
        q[++tt]=i;

    while(hh<=tt)
    {
        int t=q[hh++];

        for(int i=h[t]; i!=-1; i=ne[i])
        {
            int j=e[i];
            if(--d[j]==0)
            q[++tt]=j;
        }
    }

//如果所有点都入队了，说明存在拓扑序列；否则不存在拓扑序列。
    return tt==n-1;
}
